//
// Author: Vladimir Migashko <migashko@gmail.com>, (C) 2011
//
// Copyright: See COPYING file that comes with this distribution
//
#ifndef HITLIST_BACKUP_HPP
#define HITLIST_BACKUP_HPP

#include <string>
#include <ctime>
#include <fstream>
#include <vector>

/** @brief сохраняет в произвольные данные в файлы имя которых зависит от заданного времени
 * 
 * Формирует имя файла по заданной маске подставляя заданое время округленное до 3600 секунд (час)
  */
class backup
{
public:
  virtual ~backup();
  backup();

  /** @brief Задать маску формирования файла */
  void initialize(const std::string& path_format);
  
  /** @brief Добавить данные в файл по заданному времени 
   *  @param now время
   *  @param d указатель на буфер данных
   *  @param s размер данных
   *  имя файля формируется по маске со временем time_t((now/3600)*3600)
   */
  void write(time_t now, const char* d, size_t s);

  /** @brief Добавить данные в файл по текущему времени
   *  @param d указатель на буфер данных
   *  @param s размер данных
   *  имя файля формируется по маске со временем time_t(( time(0)/3600)*3600)
   */
  void write(const char* d, size_t s);


  void flush();

  /** @brief Считать все данные из файла по заданному времени 
   *  @param now текущее время
   *  @param hour_ago часов надаз от текущего времени 
   *  @param data куда скопировать
   *  @return false если прочитать данные не удалось
   *  имя файля формируется по маске со временем time_t(((now - hour_ago*3600)/3600)*3600)
   */
  bool read(time_t now, int hour_ago, std::vector<char>& data);
private:
  void _check_file( time_t now);
private:
  std::ofstream _file;
  time_t _last;
  std::string _path_format;
};

#endif

